"""
@name : 类self
@author : wenyao
@projectname: sanchuanglianxi
"""
#self 表示实例本身
#self不必非写成 self
# class A():
#     name = "wen"
#     age = 18
#
#     def info(self,sex):
#         print(f"我是：{self.name},今年{self.age}岁,性别{sex}")
#         print(self)
#         print(id(self))
#         print(self.__class__)
# a = A()
# print(id(a))
# a.info("女")

#self代表实例本身，self.__class__则返回类
#self的名字不是强制规定的，大家约定俗成用self来表示
#默认情况下，方法第一个参数的就是表示实例本身无论取什么名字。
#实例方法使用的时候，self不需要自己显示的传参，python解释器会自动识别。

#
# class A():
#     name = "wen"
#     age = 18
#
#     def info(self):
#         #print(f"我是：{self.name},今年{self.age}岁,性别女")
#         print(f"test self {self}")
#         # print(self)
#         # print(id(self))
#         # print(self.__class__)
#
#     def info2():
#         print("this is test")
# a = A()
# a.info()  #==>A.info(a)
# A.info(a)
#A.info("1")
# a.info2()  #==》A.info2(a) --> 报错
#TypeError: info2() takes 0 positional arguments but 1 was given
# A.info2()

#在python解释器内部，我们调用a.info()时，实际上呢就时候运行Person.info(a)，也就是把self替换成a的实例。

#在继承时，self代表哪个类呢
class Parent:
    def pprt(self):
        print(self)

class Child(Parent):
    def cprt(self):
        print(self)

c = Child()
c.cprt()
c.pprt()  #==>child.pprt(c)
p = Parent()
p.pprt()
#self  在继承时 还是代表child实例本身
#运行c.pprt的时候  -->Child.pprt(c),运行的时候子类对象发现没有pprt 就会去父类找pprt

